"""
1. 使用Python操作MongoDB向集合t3中插入1000个文档
   * 文档的属性包括 `_id`、`name`
   * _id`的值为0、1、2、3、。。。。999`
   * `name`的值为`py0`、`py1`。。。。。
2. 查询显示出`_id`为100的整数倍的文档，如100、200、300…，将`name`输出
"""

from pymongo import MongoClient


class MongoDBInfo(object):
    def __init__(self, *args, **kwargs):
        # 调用父类中的初始化方法
        # super().__init__(*args, **kwargs)
        # 写初始化代码
        # 链接MongoDB数据库
        client = MongoClient("127.0.0.1", 27017)
        # 如果运行MongoDB服务器时 mongod -auth那么就意味着在操作MongoDB数据库时进行登录认证
        client.test.authenticate('user2', 'pwd2', mechanism='SCRAM-SHA-1')
        self.collection = client["test"]["t3"]

    def insert_1000(self):
        """
        插入1000个文档
        """
        # 生成一个包含1000个信息的列表
        info_list = [{"_id": x, "name": "py%s" % x} for x in range(1000)]
        print(info_list)

        # 插入数据
        ret = self.collection.insert_many(info_list)
        print(ret)

    def find_100(self):
        """
        查询_id为100的倍数的文档
        """
        # 查询_id为100的整数倍的文档
        ret = self.collection.find({"$where": """
            function() {
                return this._id > 0 && this._id % 100 == 0;
            }
            """})

        print(ret)
        print(ret.count())
        for temp in ret:
            print(temp)


if __name__ == '__main__':
    # 创建对象
    info = MongoDBInfo()
    # 调用对象的方法(向MongoDB数据库插入1000个文档)
    # info.insert_1000()
    # 查询
    info.find_100()
